          SUBROUTINE (PASSER)
** Version# 71.0003[1] - 04/10/2014 - 09:29am - TSMITH - eclipse
*** V71.0002 Change - Custom Coding . - 10/29/2013 - TSMITH - eclipse
** Copied from BP SLS.DVR.PROD.SUM Version# 71 - 07/28/2011 - 03:01pm - EILEENM - main

*** Subroutine - SLS.DVR.PROD.SUM
*-------------------------------------------------------------------------*
*** This is the Driver routine for the Product Sales Report. It will print
*** a report of all products that were sold within a specified date range,
*** and that match any criteria specified by the User from the Driver.
*-------------------------------------------------------------------------*
*** PASSER - System Queue ID                                          (IN)
*-------------------------------------------------------------------------*
*** COMMON variables used: MOVE, OPTION, DRPT$
*-------------------------------------------------------------------------*

          *** Call up the Screen for our program...
          SCREEN

          *** Go initialize the data we'll need to run this program...
          GOSUB INIT

*-------------------------------------------------------------------------*
*** The Branch/TR/All Input...
INBR:     INP.BR 17,3,50,BR,NAME,BRCHS,TERR.TYPE
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INBR,INBR,INBR,INBR
*-------------------------------------------------------------------------*
*** Start Date Input...
INSD:     INP SD,17,4,10,'VD4/'
          IF F12 THEN GOTO FINISH
          *** If there isn't already an End Date specified, we'll make it
          *** the same as our Start Date...
          IF ED = '' THEN
             ED = SD
             PRINT @(17,5):OCONV(ED,'D4/')
          END
          ON MOVE+1 GOTO INSD,INSD,INBR,INSD
*-------------------------------------------------------------------------*
*** End Date Input...
INED:     INP ED,17,5,10,'VD4/'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INED,INED,INSD,INED
*-------------------------------------------------------------------------*
INSLCT:   *** Re-load our Hotkeys and allow Input for the Select by Input..

          *** Go reload our hotkeys...
          SFIELD = ''
          GOSUB LOAD.HOTKEYS

          *** Select by Input...
IN$$1:    INP SLCT,17,6,20,V_'D:':SEL.LIST1

          IF F12 THEN GOTO FINISH

          IF SLCT = 'Product Select Code' THEN
             PRINT @(2,7):'Slct Code' "L#12"
          END ELSE
             PRINT @(2,7):SLCT        "L#12"
          END

          IF CHANGED THEN
             SLIST = ''
             PRINT @(17,7):SLIST      "L#50"
          END

          *** Refresh our Additional Select arrays...
          SEL.LIST2 = SEL.LIST
          SEL.VALD2 = SEL.VALD
          SEL.CONV2 = SEL.CONV
          FCODE2    = FCODE

          SMV = 0
          IF SLCT THEN
             LOCATE SLCT IN SEL.LIST1<1> SETTING SMV ELSE GOTO INSLCT

             *** Remove the Select by option from the Additional Select
             *** options list...
             LOCATE SLCT IN SEL.LIST2<1> SETTING DELPOS THEN
                SEL.LIST2 = DELETE(SEL.LIST2,1,DELPOS)
                SEL.CONV2 = DELETE(SEL.CONV2,1,DELPOS)
                SEL.VALD2 = DELETE(SEL.VALD2,1,DELPOS)
                FCODE2    = DELETE(FCODE2,1,DELPOS)
             END
          END

          *** Allow movement in the Screen based on whether a Select by
          *** option was chosen...
          IF SLCT THEN
             ON MOVE+1 GOTO INSLCT,INSLCT,INED,INSLCT
          END ELSE
             ON MOVE+1 GOTO INSLCT,INSLCT,INED,INSLCT,INSLCT2,INSLCT2
          END
*-------------------------------------------------------------------------*
INSLIST:  *** Re-load our Hotkeys and allow Input for Select by entities...

          *** Go reload our hotkeys...
          SFIELD = 'SLCT1'
          GOSUB LOAD.HOTKEYS

          *** Select by entity Input...
IN$$2:    INP TSLIST,17,7,50,SEL.CONV1<1,SMV>,V_SEL.VALD1<1,SMV>

          IF F12 THEN GOTO FINISH

          IF CHANGED THEN SLIST = TSLIST

          ON MOVE+1 GOTO INSLIST,INSLIST,INSLCT,INSLIST,INSLCT2,INSLCT2
*-------------------------------------------------------------------------*
INSLCT2:  *** Re-load our Hotkeys and allow Input for the Additional
          *** Select Input...

          *** Go load our hotkeys...
          SFIELD = ''
          GOSUB LOAD.HOTKEYS

          *** Additional Select Input...
IN$$3:    INP ADDL.SLCT,17,8,20,V_'D:':SEL.LIST2

          IF F12 THEN GOTO FINISH

          IF ADDL.SLCT = 'Product Select Code' THEN
             PRINT @(2,9):'Slct Code' "L#12"
          END ELSE
             PRINT @(2,9):ADDL.SLCT   "L#12"
          END

          IF CHANGED THEN
             SLIST2 = ''
             PRINT @(17,9):SLIST2      "L#50"
          END

          *** Refresh our Select by arrays...
          SEL.LIST1 = SEL.LIST
          SEL.VALD1 = SEL.VALD
          SEL.CONV1 = SEL.CONV
          FCODE1    = FCODE

          SMV2 = 0
          IF ADDL.SLCT THEN
             LOCATE ADDL.SLCT IN SEL.LIST2<1> SETTING SMV2 ELSE
                GOTO INSLCT2
             END

             *** Remove the Additional Select option from the Select by
             *** options list...
             LOCATE ADDL.SLCT IN SEL.LIST1<1> SETTING DELPOS THEN
                SEL.LIST1 = DELETE(SEL.LIST1,1,DELPOS)
                SEL.CONV1 = DELETE(SEL.CONV1,1,DELPOS)
                SEL.VALD1 = DELETE(SEL.VALD1,1,DELPOS)
                FCODE1    = DELETE(FCODE1,1,DELPOS)
             END
          END

          *** Allow movement in the Screen based on whether a Select by
          *** and/or an Additional Select option was chosen...
          BEGIN CASE
          CASE SLCT AND ADDL.SLCT
             ON MOVE+1 GOTO INSLCT2,INSLCT2,INSLIST,INSLCT2
          CASE SLCT
             ON MOVE+1 GOTO INSLCT2,INSLCT2,INSLIST,INSLCT2,INTYP,INTYP
          CASE ADDL.SLCT
             ON MOVE+1 GOTO INSLCT2,INSLCT2,INSLCT,INSLCT2
          CASE OTHERWISE
             ON MOVE+1 GOTO INSLCT2,INSLCT2,INSLCT,INSLCT2,INTYP,INTYP
          END CASE
*-------------------------------------------------------------------------*
INSLIST2: *** Re-load our Hotkeys and allow Input for Additional Select
          *** entities...

          *** Go reload our hotkeys...
          SFIELD = 'SLCT2'
          GOSUB LOAD.HOTKEYS

          *** Additional Select entity Input...
IN$$4:    INP TSLIST2,17,9,50,SEL.CONV2<1,SMV2>,V_SEL.VALD2<1,SMV2>

          IF F12 THEN GOTO FINISH

          IF CHANGED THEN SLIST2 = TSLIST2

          ON MOVE+1 GOTO INSLIST2,INSLIST2,INSLCT2,INSLIST2
*-------------------------------------------------------------------------*
INTYP:    *** Re-load our Hotkeys and allow Input for the Location
          *** Quantity Type...

          *** Go reload our hotkeys...
          SFIELD = ''
          GOSUB LOAD.HOTKEYS

          *** Qty Type Input...
IN$$5:    INP TYP,17,10,11,V_VALID.LTYPS

          IF F12 THEN GOTO FINISH

          IF ADDL.SLCT THEN
             ON MOVE+1 GOTO INTYP,INTYP,INSLIST2,INTYP
          END ELSE
             ON MOVE+1 GOTO INTYP,INTYP,INSLCT2,INTYP
          END
*-------------------------------------------------------------------------*
*** limit the report to a specific product status code...
INSTAT:   INP TSTAT,17,11,15,V_"D:":PRD.STAT:VM:'ALL'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INSTAT,INSTAT,INTYP,INSTAT,INSORT,INSORT
*-------------------------------------------------------------------------*
*** Specify how you want to sort the report...
INSORT:   INP SORTBY,17,12,26,V_VALID.SORTBY
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INSORT,INSORT,INSTAT,INSORT,INPGBRK,INPGBRK
*-------------------------------------------------------------------------*
*** Page break Y/N Input...
INPGBRK:  INP PG.BRK,57,12,3,V_'D:Yes':VM:'No'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INPGBRK,INPGBRK,INSORT,INPGBRK,INSBR,INSBR
*-------------------------------------------------------------------------*
*** Specify the Branch Type you want to run the report for
INSBR:    INP SBR,19,13,8,V_'D:Pricing':VM:'Shipping'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INSBR,INSBR,INPGBRK,INSBR,INBS,INBS
*-------------------------------------------------------------------------*
*** Sepcifiy the Customer Type you want to display data for
INBS:     INP LEVEL,19,14,7,V_'D:,Bill-To,Ship-To,Parent'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INBS,INBS,INSBR,INBS,INOPT,INOPT
*-------------------------------------------------------------------------*
*** Detail/Summary Input...
INOPT:    INP OPT,19,15,7,V_'D:Summary':VM:'Detail'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INOPT,INOPT,INBS,INOPT,INSNS,INSNS
*-------------------------------------------------------------------------*
*** Print serial numbers on report...
INSNS:    INP SHOW.SNS,27,16,1,V_'D:,A - All,I - Inbound,N - None'
          IF F12 THEN GOTO FINISH
          ON MOVE+1 GOTO INSNS,INSNS,INOPT,INSNS,INCOSTS,INCOSTS
*-------------------------------------------------------------------------*
*** Indicate whether or not to show costs in the report...
INCOSTS:  INP COSTS,27,17,4,V_'D:Yes':VM:'No':VM:'Only'
          IF F12 THEN GOTO FINISH
          IF COSTS = '' THEN GOTO INCOSTS
          ON MOVE+1 GOTO INCOSTS,INCOSTS,INSNS,INCOSTS,INKITS,INKITS
*-------------------------------------------------------------------------*
*** Indicate whether or not to show Kit Components on the report...
INKITS:   INP KIT.COMPS,39,18,4,V_'D:Yes':VM:'No':VM:'Only'
          IF F12 THEN GOTO FINISH
          IF KIT.COMPS = '' THEN GOTO INKITS
          ON MOVE+1 GOTO INKITS,INKITS,INCOSTS,INKITS,INEDI,INEDI
*-------------------------------------------------------------------------*
*** Indicate whether or not to generate an EDI 867 document
INEDI:    INP GENERATE.EDI,21,19,1,'YN'
          IF F12 THEN GOTO FINISH
          IF GENERATE.EDI AND ADDL.OPTS<1,3> THEN
             * Cant have an 867 audit vendor and generate edi
             O.MESS = 'Can not Generate EDI with Audit Vendor Set'
             ERR.MESS 2,1,BELL:O.MESS,YES
             GENERATE.EDI = ''
             PRINT @(21,19):'N'
             GOTO INEDI
          END

          IF GENERATE.EDI AND SORTBY[1,6] # 'Branch' THEN
             SORTBYMSG = 'Generate EDI: Sort by must be: "Branch.."'
             ERR.MESS 2,1,BELL:SORTBYMSG
IN$$9:       INPNO NOTHING,,,0
             GOTO INSORT
          END

          IF GENERATE.EDI THEN
             ON MOVE+1 GOTO INEDI,INEDI,INKITS,INEDI,INEDITP,INEDITP
          END ELSE
             ON MOVE+1 GOTO INEDI,INEDI,INKITS,INEDI,INEDI,INEDI
          END
*-------------------------------------------------------------------------*
*** Select EDI Trading Partner
INEDITP:  INP EDI.TP,41,19,24,'TENTITY;X;9;9',V_'S:VERF.VEN.ID'
          IF F12 THEN GOTO FINISH
          READV XX FROM CUSFILE,EDI.TP,15 THEN
             IF NOT(XX) THEN
                MSG  = 'Vendor is not set up for EDI'
                MESS 5,3,BELL:MSG
                GOTO INEDITP
             END
          END
          ON MOVE+1 GOTO INEDITP,INEDITP,INKITS,INEDITP,INEDITP,INEDITP
*-------------------------------------------------------------------------*
SUBS:     ON OPTION GOTO DOIT,DOIT,DOIT,FSEL,STATUS,INC.EXC,MULTI,ADL.INP
*-------------------------------------------------------------------------*
ADL.INP:  * Enter Additional Options
          ORIG.ADDL.OPTS = ADDL.OPTS
          ADL.TITLE     = 'Additional Options'
          WINDOW 1,1,45, 5,3,,ADL.TITLE,YES
          PRINT @(0,1):'867 Respect Print Flag = "N" (Y/N) : ':YN[ADDL.OPTS<1,1>+1,1]  "L#1"
          PRINT @(0,2):'867 Do Not Send Duplicates (Y/N)   : ':YN[ADDL.OPTS<1,2>+1,1]  "L#1"
          IF ADDL.OPTS<1,3> THEN
             READV VNDISP FROM CUSFILE,ADDL.OPTS<1,3>,9 ELSE
                VNDISP = ADDL.OPTS<1,3>
             END
          END ELSE
             VNDISP = ''
          END
          PRINT @(0,3):'867 Audit Vendor: ':VNDISP
*-------------------------------------------------------------------------*
          * Respect Print Flag equal N to qualify for 867
INRPF:    INP ADDL.OPTS<1,1>,37,1,1,'YN'
          IF QUIT THEN GOTO ADL.EXIT
          ON MOVE+1 GOTO INRPF,INRPF,INRPF,INRPF
*-------------------------------------------------------------------------*
INDUP:    INP ADDL.OPTS<1,2>,37,2,1,'YN'
          IF QUIT THEN GOTO ADL.EXIT
          IF GENERATE.EDI THEN
             * Cant have an 867 audit vendor and generate edi
             ON MOVE+1 GOTO INDUP,INDUP,INRPF,INDUP,INDUP,INDUP
          END ELSE
             ON MOVE+1 GOTO INDUP,INDUP,INRPF,INDUP
          END
*-------------------------------------------------------------------------*
INEDIV:  INP ADDL.OPTS<1,3>,18,3,24,'TENTITY;X;9;9',V_'S:VERF.VEN.ID'
          IF QUIT THEN GOTO ADL.EXIT
          IF CHANGED THEN
             READV XX FROM CUSFILE,ADDL.OPTS<1,3>,15 THEN
                IF NOT(XX) THEN
                   MSG  = 'Vendor is not set up for EDI'
                   MESS 1,1,BELL:MSG,YES
                   ADDL.OPTS<1,3> = ''
                   PRINT @(18,3):' ' "L#24"
                   GOTO INEDIV
                END
             END
          END
          ON MOVE+1 GOTO INEDIV,INEDIV,INDUP,INEDIV,INEDIV,INEDIV
*-------------------------------------------------------------------------*
ADL.EXIT: * Exit this window and check data entered if requried.
          IF F12 THEN
             * Reset data to orginal before aborting out.
             ADDL.OPTS = ORIG.ADDL.OPTS
          END ELSE
             ORIG.ADDL.OPTS = ADDL.OPTS
          END

          WINDOW.CLOSE

          RETURN
*-------------------------------------------------------------------------*
FSEL:     *** Additional Select Criteria Input Window...
          FILTER.INPUT "S",FITEM
          RETURN
*-------------------------------------------------------------------------*
MULTI:    *** This is a window for inputting Multiple Selections for
          *** either the 'Select by' entity or the 'Additional Select'
          *** entity...

          *** Determine which entity Select we're allowing the multiple
          *** selection for...
          IF SFIELD = 'SLCT1' THEN
             MSLCT  = SLCT
             MLIST  = SLIST
             MVALID = SEL.VALD1<1,SMV>
             MCONV  = SEL.CONV1<1,SMV>
             MFCODE = FCODE1<1,SMV>
          END ELSE
             MSLCT  = ADDL.SLCT
             MLIST  = SLIST2
             MVALID = SEL.VALD2<1,SMV2>
             MCONV  = SEL.CONV2<1,SMV2>
             MFCODE = FCODE2<1,SMV2>
          END

          BEGIN CASE
          CASE MSLCT = 'Price Line'
             PHYS.PLINE.SELECT MLIST
          CASE MSLCT = 'Buy Line'
             PHYS.BLINE.SELECT MLIST
          CASE OTHERWISE
             MTITLE = 'Multiple ':MSLCT
IN$$6:       INP.MULTI MLIST,99,'L',MVALID,MCONV,MTITLE,MFCODE
          END CASE

          * Store what was entered in the Multiple Selection window.
          IF SFIELD = 'SLCT1' THEN
             SLIST  = MLIST
          END ELSE
             SLIST2 = MLIST
          END

          * Display multi valued select list.
          GOSUB DISP.MLIST

          RETURN
*-------------------------------------------------------------------------*
DISP.MLIST:*** Display multi valued select list.

          IF DCOUNT(MLIST,VM) > 1 THEN
             MSLIST = '*Multi*'
          END ELSE
             * Allow product desc to show in input field.
             IF MSLCT = 'Product' THEN
                READV TSLIST FROM PRDFILE,MLIST,1 ELSE TSLIST = MLIST
                MSLIST = TSLIST
             END ELSE
                MSLIST = MLIST
             END
          END

          * Set our position display.
          IF SFIELD = 'SLCT1' THEN
             PRINT.POS = 7
          END ELSE
             PRINT.POS = 9
          END

          * Print out the results.
          PRINT @(17,PRINT.POS):MSLIST "L#50"

          RETURN
*-------------------------------------------------------------------------*
STATUS:   *** Product Status Input...

          IF TSTAT = 'ALL' THEN
             STAT  = PRD.STAT
          END ELSE
             IF TSTAT # '*Multi*' THEN STAT = TSTAT
          END

IN$$7:    INP.MULTI STAT,20,'L',"C:PROD.STATUS",,'Product Status'

          GOSUB DISP.STAT

          RETURN
*-------------------------------------------------------------------------*
INC.EXC:  *** Include/Exclude Input window...
          INC.EXC.INP INC.STOCK,INC.TRANS,INC.CREDS,INC.DIRS,INC.VCSN,INC.CCSN,INC.VENCUST,VCSN,CCSN,INC.WOCS
          RETURN
*-------------------------------------------------------------------------*
DOIT:     *** Validate the Inputs and the Phantom for our Report...

*** Validate the Inputs...

          *** Validate the Start and End Dates...
          REQ.FLDS = ''
          IF NUM(SD) AND NUM(ED) THEN
             *** If they haven't entered an End Date...
             IF ED + 0 < 1 THEN
                REQ.FLDS<-1> = 'End Date'
             END ELSE
                IF SD > ED THEN
                   ERR.MESS 4,1,BELL:' Start Date must be before End Date'
                   RETURN TO INSD
                END
             END

             *** If they haven't entered a Start Date...
             IF SD + 0 < 1 THEN REQ.FLDS<-1> = 'Start Date'
          END
          IF TSTAT = '' THEN REQ.FLDS<-1> = 'Status'
          IF LEVEL = '' THEN REQ.FLDS<-1> = 'Customer Level'

          *** If any required fields are missing, warn the User and send
          *** them back...
          IF REQ.FLDS # '' THEN
             ERR.MESS 8,3,BELL:'Missing Required Field(s):  ':AM:REQ.FLDS
IN$$8:       INPNO A,,,0

             BEGIN CASE
             CASE REQ.FLDS<1> = 'Start Date'         ;RETURN TO INSD
             CASE REQ.FLDS<1> = 'End Date'           ;RETURN TO INED
             CASE REQ.FLDS<1> = 'Status'             ;RETURN TO INSTAT
             CASE REQ.FLDS<1> = 'Customer Level'     ;RETURN TO INBS
             END CASE
          END

          *** make sure the sort by is by branch
          IF GENERATE.EDI AND SORTBY[1,6] # 'Branch' THEN
             SORTBYMSG = 'Generate 867: Sort by must be: "Branch.."'
             ERR.MESS 2,1,BELL:SORTBYMSG
             RETURN TO INSORT
          END

          *** Set up some MV lists to handle multiple parameters...
          INC.ITEMS       = ''
          INC.ITEMS<1,1>  = INC.STOCK    ;* Stock
          INC.ITEMS<1,2>  = INC.TRANS    ;* Transfers
          INC.ITEMS<1,3>  = INC.CREDS    ;* Credits
          INC.ITEMS<1,4>  = INC.DIRS     ;* Directs
          INC.ITEMS<1,5>  = INC.VCSN     ;* Vendor Consignment
          INC.ITEMS<1,6>  = INC.CCSN     ;* Customer Consigment
          INC.ITEMS<1,7>  = INC.VENCUST  ;* Vendor to Customer Consignment
          INC.ITEMS<1,8>  = VCSN         ;* Vendor ID
          INC.ITEMS<1,9>  = CCSN         ;* Customer ID
          INC.ITEMS<1,10> = INC.WOCS     ;* Work Order Components

          IF OPTION < 3 THEN
             IF SQ.ID THEN
                PH.DEL.ARGS ARG.ERR,SQ.ID
                IF ARG.ERR THEN
                   ERR.MESS 8,3,BELL:ARG.ERR
                   RETURN
                END
             END

             *** Set the Cost Type to show on the report...
             IF COSTS # 'No' THEN
                PH.COST.AUTH.CHECK COST.TYPE
                IF F12 THEN RETURN
                IF COST.TYPE = '' THEN RETURN
             END ELSE
                *** If they don't want to 'Show Costs' then
                *** set our our Cost Type to 3 (None)...
                COST.TYPE = 3
             END

             IF TSTAT = 'ALL' THEN
                STAT = PRD.STAT
             END ELSE
                IF TSTAT # '*Multi*' THEN STAT = TSTAT
             END
             PRD.STAT = RAISE(PRD.STAT)
             FOR J = 1 TO DCOUNT(STAT,VM)
                LOCATE STAT<1,J> IN PRD.STAT SETTING NUM ELSE NUM = 0
                STAT<1,J> = NUM
             NEXT J

             * Save user screen data
             UOPTS       = ''
             IF NOT(NUM(SD)) THEN UOPTS<1,1> = SD
             IF NOT(NUM(ED)) THEN UOPTS<1,2> = ED
             UOPTS<1,3>  = SORTBY
             UOPTS<1,4>  = SBR
             UOPTS<1,5>  = LEVEL
             UOPTS<1,6>  = OPT
             UOPTS<1,7>  = SHOW.SNS
             UOPTS<1,8>  = COSTS
             UOPTS<1,9>  = KIT.COMPS
             UOPTS<1,10> = ADDL.OPTS<1,1>
             UOPTS<1,11> = ADDL.OPTS<1,2>
             SET.SCREEN.INFO 'SLS.DVR.PROD.SUM','OPTS',UOPTS
             SET.SCREEN.INFO 'SLS.DVR.PROD.SUM','INC.ITEMS',INC.ITEMS
          END

          COSTS        = COSTS[1,1]
          OPT          = OPT:VM:PG.BRK
          SORT.LVL     = SORTBY:VM:LEVEL
          COST.DATA    = COST.TYPE:VM:COSTS
          INCLUDE.DATA = INC.ITEMS:'~':SHOW.SNS:'~':KIT.COMPS
          IF GENERATE.EDI AND EDI.TP # '' THEN
             INCLUDE.DATA := '~':EDI.TP
          END ELSE
             INCLUDE.DATA := '~'
          END
          INCLUDE.DATA := '~':ADDL.OPTS

          SELECT1      = SLCT:VM:SLIST
          SELECT2      = ADDL.SLCT:VM:SLIST2

          * Run the Phantom for this report...
          PH.SETUP.BR.ARGS BR,,TERR.TYPE,,BRDISP,BRLIST
          PH.EXE PROG.NAMES,BRLIST,BRDISP,SD,ED,SELECT1,SELECT2,TYP,SORT.LVL,COST.DATA,OPT,STAT,FITEM,SBR,INCLUDE.DATA

          IF F12 THEN RETURN

          RETURN TO FINISH
*-------------------------------------------------------------------------*
INIT:     *** Initialize the data we'll need to run this program...

          * Setup program names info for phantom processing.
          PROG.NAMES = ''
          PROG.NAMES<1,1> = 'SLS.PHR.PROD.SUM.GPS'
          PROG.NAMES<1,2> = 'SLS.DVR.PROD.SUM.GPS'
          PROG.NAMES<1,3> = 'com.eclipseinc.reports.eom.ProductEOMSalesReport'

          DRPT$     = 'Apollo Customer Rebate Program'
          BR        = ''
          BRCHS     = ''
          TYP       = ''
          PG.BRK    = 'No'
          TERR.TYPE = 1
          SFIELD    = ''
          SLCT      = ''
          SLIST     = ''
          TSLIST    = ''
          ADDL.SLCT = ''
          SLIST2    = ''
          MLIST     = ''
          MSLCT     = ''
          MSLIST    = ''
          FITEM     = ''
          COST.TYPE = ''
          ADDL.OPTS = ''

          READ PRD.STAT FROM CTRLFILE, 'PROD.STATUS' ELSE PRD.STAT = ''
          STAT  = PRD.STAT
          TSTAT = 'ALL'

          * Set up field validation lists.
          VALID.SORTBY  = 'D:,Customer,Product,Writer,In Salesperson,'
          VALID.SORTBY := 'Out Salesperson,Zip Code,3 Digit Zip,'
          VALID.SORTBY := 'Select Code,Product Select Code,Buy Line,'
          VALID.SORTBY := 'Line (Price),State,Branch,Branch by Price Line,'
          VALID.SORTBY := 'Cust PO#,Customer by Budget Group,'
          VALID.SORTBY := 'Commodity Code,Customer by Commodity Code,'
          VALID.SORTBY := 'Sales Order Picker,Buy Group,Sell Group,'
          VALID.SORTBY := 'Customer by Sell Group,Customer by Product'

          VALID.LTYPS   = '*1D:,S - Stock,O - Over Shipment,F - DeFective,'
          VALID.LTYPS  := 'R - Review,L - DispLay,T - Tagged'

          * Build arrays for the Select By and Add'l Select options.
          SEL.LIST      = 'Price Line'
          SEL.VALD      = 'PRICE.LINE'
          SEL.CONV      = ''
          FCODE         = ''

          SEL.LIST<1,2> = 'Sell Group'
          SEL.VALD<1,2> = 'PRICE-GRP,1'

          SEL.LIST<1,3> = 'Buy Line'
          SEL.VALD<1,3> = 'BUY.LINE'

          SEL.LIST<1,4> = 'Buy Group'
          SEL.VALD<1,4> = 'PRICE-GRP,1'

          SEL.LIST<1,5> = 'Product'
          SEL.VALD<1,5> = 'S:VERF.PRD.ID'
          SEL.CONV<1,5> = 'TPRODUCT;X;1;1'
          FCODE<1,5>    = 'PNLIST'

          SEL.LIST<1,6> = 'Product Select Code'
          SEL.VALD<1,6> = 'C:VALID.PRD.SELECT'
          FCODE<1,6>    = 'SCD'

          * Load the Select, Validation and Conversion lists for the
          * first Select by.
          SEL.LIST1 = SEL.LIST
          SEL.VALD1 = SEL.VALD
          SEL.CONV1 = SEL.CONV
          FCODE1    = FCODE

          * Load the Select, Validation and Conversion lists for the
          * Additional Select.
          SEL.LIST2 = SEL.LIST
          SEL.VALD2 = SEL.VALD
          SEL.CONV2 = SEL.CONV
          FCODE2    = FCODE

          * Generate EDI 867
          GENERATE.EDI = NO ;* EDI
          EDI.TP       = '' ;* EDI

          SQ.ID = '' ;* System Queue id
          IF PASSER THEN
             UT.OPEN.FILE 'SYSTEM.QUEUE',SQFILE,ERR.MSG
             IF ERR.MSG THEN RETURN
             READV TEST.NAMES FROM SQFILE,PASSER,2 ELSE TEST.NAMES = ''
             IF TEST.NAMES<1,1> = PROG.NAMES<1,1> THEN SQ.ID = PASSER
          END

          IF SQ.ID THEN
             GOSUB RECALLSQ
             IF ERR.MSG THEN
                ERR.MESS ,,ERR.MSG,YES
                GOTO FINISH
             END
          END ELSE
             ADDL.OPTS = ''
             * Get users last options
             GET.SCREEN.INFO 'SLS.DVR.PROD.SUM','OPTS',UOPTS
             IF UOPTS THEN
                SD             = UOPTS<1,1>
                ED             = UOPTS<1,2>
                SORTBY         = UOPTS<1,3>
                SBR            = UOPTS<1,4>
                LEVEL          = UOPTS<1,5>
                OPT            = UOPTS<1,6>
                SHOW.SNS       = UOPTS<1,7>
                COSTS          = UOPTS<1,8>
                KIT.COMPS      = UOPTS<1,9>
                ADDL.OPTS<1,1> = UOPTS<1,10> +0
                ADDL.OPTS<1,2> = UOPTS<1,11> +0
             END ELSE
                SD             = ''
                ED             = ''
                SORTBY         = 'Customer'
                SBR            = 'Pricing'
                LEVEL          = 'Ship-To'
                OPT            = 'Detail'
                SHOW.SNS       = 'N'
                COSTS          = 'Yes'
                KIT.COMPS      = 'No'
                * Set Default to Nos for 867 to respect print flag=N
                * This keeps this change backwards compatable.
                ADDL.OPTS<1,1> = 0    ;* Print Flag
                ADDL.OPTS<1,2> = 0    ;* Allow dups
             END

             GET.SCREEN.INFO 'SLS.DVR.PROD.SUM','INC.ITEMS',INC.ITEMS
             IF INC.ITEMS THEN
                INC.STOCK   = INC.ITEMS<1,1> ;* Stock/Non-Stock
                INC.TRANS   = INC.ITEMS<1,2> ;* Transfers
                INC.CREDS   = INC.ITEMS<1,3> ;* Credits
                INC.DIRS    = INC.ITEMS<1,4> ;* Directs
                INC.VCSN    = INC.ITEMS<1,5> ;* Vendor Consignment
                INC.CCSN    = INC.ITEMS<1,6> ;* Customer Consigment
                INC.VENCUST = INC.ITEMS<1,7> ;* Vendor to Cust Consignment
                VCSN        = INC.ITEMS<1,8> ;* Vendor ID
                CCSN        = INC.ITEMS<1,9> ;* Customer ID
                INC.WOCS    = INC.ITEMS<1,10>;* Show Work Order Components
                IF NOT(INC.WOCS) THEN
                   INC.WOCS = 'Exclude'
                END
             END ELSE
                INC.STOCK   = 'Include'      ;* Stock/Non-Stock
                INC.TRANS   = 'Exclude'      ;* Transfers
                INC.CREDS   = 'Include'      ;* Credits
                INC.DIRS    = 'Include'      ;* Directs
                INC.VCSN    = 'Include'      ;* Vendor Consignment
                INC.CCSN    = 'Include'      ;* Customer Consigment
                INC.VENCUST = 'Include'      ;* Vendor to Cust Consignment
                VCSN        = ''             ;* Vendor ID
                CCSN        = ''             ;* Customer ID
                INC.WOCS    = 'Exclude'      ;* Show Work Order Components
             END
          END

          GOSUB DISPLAY
          GOSUB LOAD.HOTKEYS

          RETURN
*-------------------------------------------------------------------------*
RECALLSQ: *** Recall System Queue defaults.

          PH.READ.ARGS ERR.MSG,SQ.ID,RPT.DFLT,USR.ID,BRLIST,BRDISP,SD,ED,SELECT1,SELECT2,TYP,SORT.LVL,COST.DATA,OPT,STAT,FITEM,SBR,INCLUDE.DATA

          IF ERR.MSG THEN RETURN

          DRPT$ = RPT.DFLT

          * Setup branch/territory list
          IF BRLIST[1,8] = "$BRLIST$" THEN
             ARGS     = ''
             ARGS<3>  = USR.ID
             ARGS<10> = BRLIST
             ARGS<11> = BRDISP
             PH.PARSE.BR.LIST ARGS
             BR    = ARGS<11> ;* branch display
             BRCHS = ARGS<10> ;* branch list
          END ELSE
             BR    = BRDISP
             BRCHS = BRLIST
          END

          SLCT      = SELECT1<1,1>
          SLIST     = DELETE(SELECT1,1,1)
          ADDL.SLCT = SELECT2<1,1>
          SLIST2    = DELETE(SELECT2,1,1)
          SORTBY    = SORT.LVL<1,1>
          LEVEL     = SORT.LVL<1,2>
          COST.TYPE = COST.DATA<1,1>
          COSTS     = COST.DATA<1,2>
          PG.BRK    = OPT<1,2>
          OPT       = OPT<1,1>

          BEGIN CASE
          CASE COSTS = 'Y'; COSTS = 'Yes'
          CASE COSTS = 'O'; COSTS = 'Only'
          CASE OTHERWISE  ; COSTS = 'No'
          END CASE

          * Remove the Select By option from the Additional Select
          IF SLCT THEN
             LOCATE SLCT IN SEL.LIST1<1> SETTING SMV THEN
                LOCATE SLCT IN SEL.LIST2<1> SETTING DELPOS THEN
                   SEL.LIST2 = DELETE(SEL.LIST2,1,DELPOS)
                   SEL.CONV2 = DELETE(SEL.CONV2,1,DELPOS)
                   SEL.VALD2 = DELETE(SEL.VALD2,1,DELPOS)
                   FCODE2    = DELETE(FCODE2,1,DELPOS)
                END
             END
          END

          * Remove the Additional Select option from the Select By
          IF ADDL.SLCT THEN
             LOCATE ADDL.SLCT IN SEL.LIST2<1> SETTING SMV2 THEN
                LOCATE ADDL.SLCT IN SEL.LIST1<1> SETTING DELPOS THEN
                   SEL.LIST1 = DELETE(SEL.LIST1,1,DELPOS)
                   SEL.CONV1 = DELETE(SEL.CONV1,1,DELPOS)
                   SEL.VALD1 = DELETE(SEL.VALD1,1,DELPOS)
                   FCODE1    = DELETE(FCODE1,1,DELPOS)
                END
             END
          END

          * Convert product status
          CNT = DCOUNT(STAT,VM)
          FOR X = 1 TO CNT
             STAT.NUM  = STAT<1,X>
             STAT<1,X> = PRD.STAT<1,STAT.NUM>
          NEXT J

          * Parse the included data
          INC.ITEMS   = FIELD(INCLUDE.DATA,'~',1)
          SHOW.SNS    = FIELD(INCLUDE.DATA,'~',2)
          KIT.COMPS   = FIELD(INCLUDE.DATA,'~',3)
          EDI.TP      = FIELD(INCLUDE.DATA,'~',4)
          ADDL.OPTS   = FIELD(INCLUDE.DATA,'~',5)

          * Break out the Included/Excluded/Only items
          INC.STOCK   = INC.ITEMS<1,1>
          INC.TRANS   = INC.ITEMS<1,2>
          INC.CREDS   = INC.ITEMS<1,3>
          INC.DIRS    = INC.ITEMS<1,4>
          INC.VCSN    = INC.ITEMS<1,5>
          INC.CCSN    = INC.ITEMS<1,6>
          INC.VENCUST = INC.ITEMS<1,7>
          VCSN        = INC.ITEMS<1,8>
          CCSN        = INC.ITEMS<1,9>
          INC.WOCS    = INC.ITEMS<1,10>

          IF EDI.TP THEN
             GENERATE.EDI = YES
          END ELSE
             GENERATE.EDI = NO
          END

          RETURN
*-------------------------------------------------------------------------*
DISPLAY:  *** Display screen

          PRINT @(75,0) :REV$:"Save":NORM$:
          PRINT @(17,3) :BR                     "L#50"
          PRINT @(17,4) :OCONV(SD,'D4/')        "L#10"
          PRINT @(17,5) :OCONV(ED,'D4/')        "L#10"

          PRINT @(17,6) :SLCT                   "L#20"
          IF SLCT = 'Product Select Code' THEN
             PRINT @(2,7):'Slct Code'           "L#12"
          END ELSE
             PRINT @(2,7):SLCT                  "L#12"
          END
          SFIELD = 'SLCT1'
          MSLCT  = SLCT
          MLIST  = SLIST
          GOSUB DISP.MLIST

          PRINT @(17,8) :ADDL.SLCT              "L#20"
          IF SLCT = 'Product Select Code' THEN
             PRINT @(2,9):'Slct Code'           "L#12"
          END ELSE
             PRINT @(2,9):ADDL.SLCT             "L#12"
          END
          SFIELD = 'SLCT2'
          MSLCT  = ADDL.SLCT
          MLIST  = SLIST2
          GOSUB DISP.MLIST

          PRINT @(17,10):TYP                    "L#11"
          GOSUB DISP.STAT
          PRINT @(17,12):SORTBY                 "L#26"
          PRINT @(57,12):PG.BRK                 "L#4"
          PRINT @(19,13):SBR                    "L#10"
          PRINT @(19,14):LEVEL                  "L#10"
          PRINT @(19,15):OPT                    "L#10"
          PRINT @(27,16):SHOW.SNS               "L#4"
          PRINT @(27,17):COSTS                  "L#4"
          PRINT @(39,18):KIT.COMPS              "L#4"
          PRINT @(21,19):"NY"[GENERATE.EDI+1,1] "L#1"  ;* EDI

          IF EDI.TP THEN
             READV TEDI.TP FROM CUSFILE,EDI.TP,1 ELSE TEDI.TP = EDI.TP
          END ELSE
             TEDI.TP = EDI.TP
          END
          PRINT @(41,19):TEDI.TP                "L#24" ;* EDI

          RETURN
*-------------------------------------------------------------------------*
DISP.STAT:*** Display status

          IF DCOUNT(STAT,VM)>1 THEN
             IF DCOUNT(STAT,VM) = DCOUNT(PRD.STAT,VM) THEN
                TSTAT = 'ALL'
             END ELSE
                TSTAT = '*Multi*'
             END
          END ELSE
             TSTAT = STAT
          END

          PRINT @(17,11):TSTAT "L#15"

          RETURN
*-------------------------------------------------------------------------*
LOAD.HOTKEYS: *** Load the Hotkeys...

          *** Always need to clear the menu out first...
          MENU.CLEAR

          MENU.LOAD  2,21,5,1,'P'
          MENU.LOAD 10,21,4,1,'H'
          MENU.LOAD 17,21,4,1,'O'
          MENU.LOAD 24,21,4,1,'S'
          MENU.LOAD 31,21,6,2,'T'
          MENU.LOAD 40,21,7,1,'I'
          *** Determine whether the Multi Hotkey should be active...
          BEGIN CASE
          CASE SFIELD = 'SLCT1' AND SLCT
             MENU.LOAD 50,21,5,1,'M'
          CASE SFIELD = 'SLCT2' AND ADDL.SLCT
             MENU.LOAD 50,21,5,1,'M'
          CASE OTHERWISE
             MENU.LOAD ,,,,
          END CASE
          MENU.LOAD 58,21,9,1,'A'

          RETURN
*-------------------------------------------------------------------------*
FINISH:   *** Close our report Driver and exit the program..
          WINDOW.CLOSE
          RETURN
*-------------------------------------------------------------------------*
!TSMITH~04/10/14~09:29
